﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EpsiRisk.DonneesPlateau;
using EpsiRisk.AffichageJeu;

namespace EpsiRisk.MoteurJeu
{
    public static class ClassPhaseDeplacement
    {
        public static ClassSousTerritoire sousTerritoireSource
        {
            get { return ClassEtatPartie.sousTerritoireSelectionne; }
            set { ClassEtatPartie.sousTerritoireSelectionne = value; }
        }
        public static ClassSousTerritoire sousTerritoireDestination
        {
            get { return ClassEtatPartie.sousTerritoireSelectionneBis; }
            set { ClassEtatPartie.sousTerritoireSelectionneBis = value; }
        }

        //nombre d'unitées à déplacer
        private static int unitees_a_deplacer;

        public static int getUniteesADeplacer()
        {
            return unitees_a_deplacer;
        }

        public static void initialisePhaseDeplacement()
        {
            sousTerritoireSource = null;
            sousTerritoireDestination = null;
            unitees_a_deplacer = 0;
        }

        public static void setSource(ClassSousTerritoire sT)
        {
            if (sT != null)
                if (sT.Proprietaire == ClassEtatPartie.joueurCourant())
                    sousTerritoireSource = sT;
                else
                    ClassDonneesGlobales.zoneOverlayMessage.PopText("Le pays source n'est pas a vous");
        }

        public static void setDestination(ClassSousTerritoire sT)
        {
            if (sT != null)
                if (sT.Proprietaire == ClassEtatPartie.joueurCourant())
                {
                    sousTerritoireDestination = sT;
                }
                else
                {
                    ClassDonneesGlobales.zoneOverlayMessage.PopText("Le pays de destination n'est pas a vous");
                }
        }

        internal static void ClicSousTerritoire(ClassSousTerritoire sT)
        {
            if (sT != null)
            {
                if (sousTerritoireSource == null)
                {
                    setSource(sT);
                    sousTerritoireDestination = null;
                }
                else
                {
                    if (sT == sousTerritoireSource)
                    {
                        initialisePhaseDeplacement();
                    }
                    else
                    {
                        if (sT == sousTerritoireDestination)
                        {
                            sousTerritoireDestination = null;
                        }
                        else
                        {
                            if (sousTerritoireSource.Voisins.Contains(sT))
                            {
                                unitees_a_deplacer = sousTerritoireSource.nbArmees - 1;
                                setDestination(sT);
                            }
                            else
                            {
                                initialisePhaseDeplacement();
                                setSource(sT);
                            }
                        }
                    }
                }
            }
        }

        public static void deplacer()
        {
            if (sousTerritoireDestination != null)
            {
                sousTerritoireSource.deplacerSoldats(sousTerritoireDestination, unitees_a_deplacer);
                initialisePhaseDeplacement();
            }
            else
            {
                ClassDonneesGlobales.zoneOverlayMessage.PopText("selectionnez d'abord les territoires");
            }
        }

        public static void diminuer()
        {
            if (unitees_a_deplacer - 1 >= 0)
                unitees_a_deplacer--;
        }

        public static void augmenter()
        {
            if (unitees_a_deplacer + 1 < sousTerritoireSource.nbArmees)
                unitees_a_deplacer++;
        }
    }
}
